import os

from PySide2.QtCore import QUrl
from PySide2.QtWebEngineWidgets import QWebEngineView
from PySide2.QtWidgets import QApplication, QMessageBox, QFileDialog, QMdiSubWindow, QTextEdit
from PySide2.QtUiTools import QUiLoader
from matplotlib.backends.backend_qt import NavigationToolbar2QT

from lib.share import SI
# from tool.bili import load_stock_data, StockAnalysisApp, MplCanvas

from tool.data_show import DataShow
from tool.math import AnimatedScatter
from tool.sanjiao_hanshu import AnimatedTrigPlot


class Login:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意：里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('login.ui')

        self.ui.btn_login.clicked.connect(self.onSignIn)
        self.ui.edt_passwd.returnPressed.connect(self.onSignIn)

    def onSignIn(self):
        # 点击登录--获取编辑栏里的用户名和密码---发送给后端验证---收取后端回应
        username = self.ui.edt_username.text()
        passwd = self.ui.edt_passwd.text()
        if username == 'twj' and passwd == '123456':
            print("登陆成功")
        #     开始窗口切换到主窗口 初始化之后放到公共模块SI里
            SI.main=Main()
        #     展示新窗口
            SI.main.ui.show()
        # 隐藏自己的窗口
            self.ui.edt_passwd.setText('')
            self.ui.hide()

        else:
            QMessageBox.warning(
                # 父窗口
                self.ui,
                '登陆失败',
                '用户名或密码错误')
            return

class Main:

    def __init__(self):
        # 从文件中加载UI定义
        self.ui = QUiLoader().load('main.ui')
        # 退出按钮
        self.ui.act_logout.triggered.connect(self.OnSignout)
        #导入数据
        self.ui.menu_get_data.triggered.connect(self.OnGetData)

        self.ui.act_shoupan.triggered.connect(self.OnAnalysis_shoupan)

        self.ui.actiontest.triggered.connect(self.math_test)

        self.ui.actionsanjiao.triggered.connect(self.math_sanjiao)

        self.ui.actioncompe.triggered.connect(self.competation)

        self.ui.actionmin_max.triggered.connect(self.min_max)


    def OnSignout(self):
        SI.main.ui.close()
        SI.login.ui.show()
    # 从本地导入数据并显示在main窗口下
    def OnGetData(self):
        print('导入数据')
        filePath, _ = QFileDialog.getOpenFileName(
            self.ui,  # 父窗口对象
            "选择你要上传的文件",  # 标题
            r"d:\\",  # 起始目录
            "文件类型 (*.png *.jpg *.bmp *.csv)"  # 选择类型过滤项，过滤内容在括号中
        )
        # 获取数据
        if filePath:
            print(filePath)
            window = DataShow(str(filePath))

    def OnAnalysis_shoupan(self):
#         在act_analysis显示一个子窗口
        mdi=SI.main.ui.mdiArea
        sub = QMdiSubWindow()
# 生成带控件的HTML文件（确保路径正确）
        current_dir = os.getcwd()
        html_file_path = os.path.join(current_dir,  "单线-有图标.html")
    # 使用WebEngineView加载
        browser = QWebEngineView()
        browser.setUrl(QUrl.fromLocalFile(html_file_path))

        # 调整子窗口布局
        sub.setWidget(browser)
        sub.setWindowTitle("B 站股价动态时间轴")
        sub.setGeometry(100, 100, 1600, 1000)
        mdi.addSubWindow(sub)
        sub.show()

    def math_test(self):
        test=AnimatedScatter()
        mdi = SI.main.ui.mdiArea
        sub = QMdiSubWindow()
        sub.setWidget(test)
        mdi.addSubWindow(sub)
        sub.show()

    def math_sanjiao(self):
        test = AnimatedTrigPlot()
        mdi = SI.main.ui.mdiArea
        sub = QMdiSubWindow()
        sub.setWidget(test)
        mdi.addSubWindow(sub)
        sub.show()

    def competation(self):
        # act_analysis显示一个子窗口
        mdi = SI.main.ui.mdiArea
        sub = QMdiSubWindow()
        # 生成带控件的HTML文件（确保路径正确）
        current_dir = os.getcwd()
        html_file_path = os.path.join(current_dir, "./条形竞赛图.html")
        # 使用WebEngineView加载
        browser = QWebEngineView()
        browser.setUrl(QUrl.fromLocalFile(html_file_path))

        # 调整子窗口布局
        sub.setWidget(browser)
        sub.setWindowTitle("城市条形竞赛图")
        sub.setGeometry(100, 100, 1600, 1000)
        mdi.addSubWindow(sub)
        sub.show()

    def min_max(self):
        # 在act_analysis显示一个子窗口
        mdi = SI.main.ui.mdiArea
        sub = QMdiSubWindow()
        # 生成带控件的HTML文件（确保路径正确）
        current_dir = os.getcwd()
        html_file_path = os.path.join(current_dir, "双线-有图标.html")
        # 使用WebEngineView加载
        browser = QWebEngineView()
        browser.setUrl(QUrl.fromLocalFile(html_file_path))

        # 调整子窗口布局
        sub.setWidget(browser)
        sub.setWindowTitle("B 站股价动态时间轴")
        sub.setGeometry(100, 100, 1600, 1000)
        mdi.addSubWindow(sub)
        sub.show()

app=QApplication([])
SI.login=Login()
SI.login.ui.show()
app.exec_()